package material.singleton;

public class Singleton {
    //利用一个静态变量来记录Singleton类的唯一实例
    private static Singleton uniquerSingleton;

    /*通过新增synchronized关键字到getInstance方法中，我们迫使每个线程
     * 在进入这个方法之前，要先等候别的线程离开这个方法，也就是不允许 两个及两个以上的线程执行此方法*/
    private static synchronized Singleton getInstance() {//将构造器声明为私有，只有来自Singleton类内才可以调用构造器
        if (uniquerSingleton == null) {
            /*如果对象不存在，就利用私有构造器产生 一个实例，
            并把它赋值到uniquerSingleton静态变量中，
            如果我们不需要，它就永远不会产生，这就是延迟实例化*/
            uniquerSingleton = new Singleton();
        }
        return uniquerSingleton;
    }

}
